home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
russell
/
russell.lha
/
examples
/
self_appl.r
< prev
next >
Wrap
Text File
|
1989-12-29
|
987b
|
48 lines
(* Compile with -p *)
#define L val Short
#define R val Short
#define L_to_R func[L]R
(*
* Applicative Call-by-Value Least Fixed Point
*)
let
Y ==
func[ h: func[ L_to_R ] L_to_R ] L_to_R {
let
T == prod{ fn: func[ val T ] L_to_R } ;
f == func[ v: val T ] L_to_R {
h [
func[ x: L ] R {
((fn[v])[v])[x]
}
]
}
in
f[T$Mk[f]]
ni
} ;
G ==
func[ f: func[val Short] val Short ] {
func[ n: val Short ] {
if
n > 0 ==>
n * f[n - 1]
# n = 0 ==>
1
fi
}
} ;
! == Y[G]
in
put[6!]; put["\n"]
ni